#ifndef _CMDPBOC_H_
#define _CMDPBOC_H_

#include "lib/includes.h"
/*
**************************************************************************************************************
======================================>>错误提示信息对照表  十进制表示<<======================================
【01】________________________________________________________________________________________________________
**************************************************************************************************************
◆============================================================================================================
◆=====>> ISO7816 T0/T1接口驱动相关错误对照表  <<=============================================================
◆============================================================================================================
**************************************************************************************************************
=====>>	取值范围 8192--12288(HEX:0x2000--0x3000) 

0		操作OK
9000	接收数据失败(奇偶校验错误 这里不是一次而是多次)
9010	接收数据超时
9020	卡片电源异常
9030	复位应答里，接收到的第一字节TS不对，非3B/3F
9040	复位应答里，TA1错误
9050	复位应答里，TD1错误
9060	复位应答里，TC2错误
9070	复位应答里，非T0,T1协议，终端不支持

9080	APDU数据交互接收到IC卡回的数据长度不对，小于4字节
9090	APDU数据交互接收到IC卡回的数据校验不对
9100	APDU数据交互接收到IC卡回的数据长度不对大于IFSD
9110	APDU数据交互接收到IC卡回的数据错误，协议错误
9120	APDU数据交互接错误，尝试重发了三次都失败
9130	APDU数据交互，接收到的NAD不相等，协议错误
9140	APDU数据交互失败，卡片未上电或已经下电


【02】________________________________________________________________________________________________________
**************************************************************************************************************
◆============================================================================================================
◆=====>> APDU应用层命令错误对照表             <<=============================================================
◆============================================================================================================
**************************************************************************************************************
=====>>	取值范围 12288--65535(HEX:0x6000--0xFFFF) 

0x9000		操作OK

0x61FF		需要发出GET RESONSE命令 
0x6281		回送数据可能出错 
0x6283		选择文件无效 
0x620 		无信息提供 
0x6281		部分回送的数据可能有错 
0x6282		文件长度<Le 
0x6284		FCI格式与P2指定的不符 
0x6300		认证失败 
0x63CF		验证失败，还剩下X次尝试机会 
0x6400		状态标志未改变
0x6581		内存失败 
0x6700		Lc不正确  长度错误（Le不正确）LC域不存在  P1P2与LC不一致
0x6882		不支持安全报文
0x6900		不能处理
0x6901		命令不接受（无效状态）
0x6981		命令与文件结构不相容
0x6982		不满足安全状态  操作条件不满足
0x6983		个人密码锁定
0x6984		引用数据无效  随机数据无效
0x6985		使用条件不满足
0x6986		不满足命令执行的条件（非当前EF）（不是当前DF）
0x6987		安全报文数据项丢失
0x6988		安全报文数据项不正确
0x9302		MAC无效
0x9303		应用已被永久锁定
0x9383		应用已被永久锁定
0x9401		金额不满足
0x9403		未找到相应的密钥   密钥版本不支持"
0x9406		所需MAC和TAC不可用//(命令报文中的ET脱机交易序号与卡内记录不符)
0x6A00		数据参数不正确
0x6A81		不支持此功能  应用锁定
0x6A82		未找到文件
0x6A83		未找到记录
0x6A84		文件中存储空间不够
0x6A86		参数P1P2不正确
0x6A88		未找到引用数据
0x6B00		参数错误（偏移地址超出了EF）
0x6CFF		长度错误（Le不正确，XX表示实际长度）
0x6CFF		Le长度错误，实际长度XX
0x6D00		INS不正确
0x6E00		CLA不正确
0x6F00		数据无效

**************************************************************************************************************
*/
#define	  Gich_Icc   0	
#define	  Gich_Sam   1	

#define	ICC_APDU_Rcv_MAXBUF			( 260UL )
#define	ICC_APDU_Sed_MAXBUF			( 260UL )

#define 	DEF_SysCard_Debug  errmsg("Er F=%s N=%d\r\n",__FILE__,__LINE__);

extern U08  gCmdBuffer[ICC_APDU_Sed_MAXBUF];                  
extern U08  gpRcvBuffer[ICC_APDU_Rcv_MAXBUF];

extern U32  Grcv_Len;

extern void errmsg( const char *format, ... );
/*
**************************************************************************************************************
*         								     函 数
**************************************************************************************************************
*/

extern U32 ICF_GetChallenge4B( U08 *Rnd, U32 ich );
extern U32 ICF_GetChallenge8B( U08 *Rnd, U32 ich );
extern U32 ICF_SelectAID( const char *AID, U32 ilen, U32 ich );
extern U32 ICF_SelectSFI( const char *SFI, U32 ich );
extern U32 ICF_ReadBinaryFile( U08 SFI, U08 Offset, U08 BytesToRead, U32 ich );
extern U32 ICF_WriteBinaryFile( U08 SFI, U08 Offset, U08 BytesToWrite, U08 *DataUnit, U32 ich );
extern U32 ICF_ReadRecord( U08 SFI, U08 recordnumber, U08 RecordLength, U32 ich );
extern U32 ICF_GetBalanceEP( U32 *bl, U32 ich );
extern U32 ICF_GetBalanceED( U32 *bl, U32 ich );
extern U32 ICF_GetTransactionProof( U08 TransType, U08 *CTC, U32 ich );
extern U32 ICF_InitForPurchaseEP( U08 KeyIndex, U08 *Amont, U08 *TermID, U32 ich );
extern U32 ICF_DebitForPurchase( U08 *TTC, U08 *CurrentTime, U08 *MAC1, U32 ich );
extern U32 ICF_InitSamForPurchase(  U08 *icc, 
		                            U08 *CTC, 
									U08 *Amont, 
				                    U08 *CurrentTime, 
									U08 KeyVer, 
									U08 KeyDrk,
				                    U08 *ASN, 
									U08 *MakeCardId, 
									U32 ich );
extern U32 ICF_CreditSamForPurchase( U08 *MAC2, U32 ich );
extern U32 ICF_InitSamForDes( U32 ich );
extern U32 ICF_SamDESCrypt( U08 *iniCbc, U32 ich );
extern U32 ICF_CardBlock( U08 BytesToWrite, U08 *DataUnit, U32 ich );

extern U32 ICF_InitSamForDes_ToEXAUTN( U08 KeyVer, U08 *Icc, U08 *citycode, U32 ich );
extern U32 ICF_SamDESCrypt_ToEXAUTN( U08 *Icc, U32 ich );
extern U32 ICF_ExternalAuthentication( U08 KeyVer, U08 *Info, U32 ich );
extern U32 ICF_ExternalAUTH( U08 PSAMKeyVer, U08 PICCKeyVer, U08 *icc, U08 *citycode );


extern unsigned short ICF_GetSecuityCode( int ich );

extern unsigned short ICF_CheckSecuityCode( U08 *SecuityCode, int ich );
//================================================================================================================
//================================================================================================================
//================================================================================================================
//公交应用相关的特殊指令
//

#endif